MVVM (Model-View-ViewModel) প্যাটার্ন তিনটি মূল উপাদানে বিভক্ত: Model, View, এবং ViewModel। এই তিনটি উপাদান UI ডেভেলপমেন্টের মধ্যে পৃথক দায়িত্ব পালন করে এবং একে অপরের সাথে নির্দিষ্ট উপায়ে যোগাযোগ করে।
MVVM প্যাটার্ন UI, ডেটা এবং বিজনেস লজিকের মধ্যে পরিষ্কার আলাদা বিভাজন তৈরি করে, যা কোড মেইনটেনেবল, টেস্টেবল এবং স্কেলযোগ্য হতে সাহায্য করে।
MVVM প্যাটার্নে Model একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান যা অ্যাপ্লিকেশনের ডেটা এবং বিজনেস লজিক পরিচালনা করে। এটি সাধারণত ইউজার ইন্টারফেস (UI) এর সাথে সরাসরি সম্পর্কিত নয়, বরং শুধুমাত্র ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণের কাজ করে। Model এর ভূমিকা এবং এটি কীভাবে ব্যবহার করা হয়, তা বোঝা UI ডেভেলপমেন্টে MVVM প্যাটার্নের সঠিক ব্যবহার নিশ্চিত করতে সাহায্য করবে।
Save
বা Update
ফাংশন ব্যবহার করে। উদাহরণস্বরূপ, একজন ব্যবহারকারী একটি ফর্ম পূর্ণ করলে, Model সেই ডেটা ডেটাবেসে সেভ করবে এবং পরে তা প্রয়োজনীয় হলে পুনরুদ্ধার করবে।ধরা যাক, একটি সিম্পল টাস্ক ম্যানেজমেন্ট অ্যাপ তৈরি করা হচ্ছে যেখানে Task (টাস্ক) সম্পর্কিত ডেটা মডেল করা হবে:
public class TaskModel
{
public int TaskId { get; set; }
public string TaskName { get; set; }
public bool IsCompleted { get; set; }
public TaskModel(int taskId, string taskName, bool isCompleted)
{
TaskId = taskId;
TaskName = taskName;
IsCompleted = isCompleted;
}
// Method to simulate saving task data to a database
public void SaveTask()
{
// Database save logic (e.g., using Entity Framework or ADO.NET)
Console.WriteLine($"Task {TaskName} saved to database.");
}
}
এখানে TaskModel
হল Model, যা টাস্ক সম্পর্কিত সমস্ত ডেটা এবং প্রক্রিয়াকরণ ধারণ করে। যেমন, টাস্কের নাম, আইডি, এবং এর সম্পূর্ণতার অবস্থা।
এখন, ViewModel এ Model ব্যবহার করা হবে:
public class TaskViewModel
{
public TaskModel Task { get; set; }
public TaskViewModel()
{
// Model থেকে ডেটা পেতে এবং View-এ প্রক্রিয়া করার জন্য
Task = new TaskModel(1, "Complete MVVM Tutorial", false);
}
public void CompleteTask()
{
Task.IsCompleted = true;
Task.SaveTask(); // Model এ ডেটা সেভ করা হচ্ছে
}
}
এখানে TaskViewModel Model থেকে ডেটা গ্রহণ করে এবং তা UI এর জন্য প্রক্রিয়া করছে। UI-এ যখন ইউজার কোনো অ্যাকশন করবে, তখন ViewModel সেই পরিবর্তন Model-এ পাঠাবে এবং View-এ তা উপস্থাপন করবে।
Model MVVM প্যাটার্নের একটি মৌলিক উপাদান যা ডেটা এবং বিজনেস লজিককে নিয়ন্ত্রণ করে। এটি View বা ViewModel এর সাথে সরাসরি সম্পর্কিত নয়, কিন্তু UI উপস্থাপন এবং প্রক্রিয়া করা ডেটার ভিত্তিতে ViewModel এর মাধ্যমে View-এ উপস্থাপন করা হয়। Model ডেটা সংগ্রহ, প্রক্রিয়া, সংরক্ষণ এবং API বা ডেটাবেসের সাথে যোগাযোগের কাজ করে, যা অ্যাপ্লিকেশনের মূল লজিকের অংশ।
MVVM প্যাটার্নে View হল সেই উপাদান যা ব্যবহারকারীর সাথে সরাসরি ইন্টারঅ্যাক্ট করে। এটি UI উপাদানগুলি যেমন বাটন, টেক্সটবক্স, লেবেল, ড্রপডাউন, ইত্যাদি ধারণ করে এবং ব্যবহারকারীর ইনপুট গ্রহণ করে। View সাধারণত ViewModel এর সাথে ডেটা বাইন্ডিং ব্যবহার করে, যার মাধ্যমে UI উপাদানগুলি ViewModel এর ডেটা এবং অবস্থা প্রদর্শন করে এবং পরিবর্তনিত ডেটা ViewModel এ পাঠানো হয়। এই ধারণা আরও পরিষ্কারভাবে বোঝার জন্য নিচে বিস্তারিত ব্যাখ্যা করা হয়েছে।
Data Binding হল একটি প্রক্রিয়া যার মাধ্যমে UI উপাদানগুলি এবং ডেটার মধ্যে স্বয়ংক্রিয় সংযোগ স্থাপন করা হয়। MVVM প্যাটার্নে, ViewModel এবং View এর মধ্যে ডেটা বাইন্ডিং ব্যবহৃত হয়, যা ব্যবহারকারীর ইনপুট এবং ডেটা পরিবর্তনকে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করে। Data Binding UI এর সাথে বিজনেস লজিকের মধ্যে একটি পরিষ্কার সম্পর্ক তৈরি করে, যা কোডের মেইনটেনেবলিটি এবং পারফরম্যান্স বাড়ায়।
ধরা যাক, একটি সিম্পল WPF অ্যাপ্লিকেশন তৈরি করা হচ্ছে যেখানে একটি টেক্সটবক্সের মাধ্যমে ব্যবহারকারী নাম ইনপুট করবে এবং সেটি ViewModel-এ সেভ হবে। এখানে Two-Way Data Binding ব্যবহৃত হবে।
<TextBox Text="{Binding UserName, Mode=TwoWay}" />
public class UserViewModel
{
public string UserName { get; set; }
public UserViewModel()
{
UserName = "John Doe";
}
}
এই উদাহরণে, TextBox-এর Text
প্রপার্টি UserName প্রপার্টির সাথে বাইন্ড করা হয়েছে। যখন ব্যবহারকারী টেক্সটবক্সে কিছু লিখবেন, তা UserName প্রপার্টিতে আপডেট হবে এবং সেই ডেটা ViewModel থেকে View-এ প্রতিফলিত হবে।
View হল MVVM প্যাটার্নের UI উপাদান, যা ব্যবহারকারীর সাথে সরাসরি ইন্টারঅ্যাক্ট করে এবং ViewModel এর সাথে ডেটা বাইন্ডিং ব্যবহার করে। Data Binding একটি শক্তিশালী প্রক্রিয়া যা UI এবং ডেটার মধ্যে সম্পর্ক স্থাপন করে এবং তাদের মধ্যে ডেটা পরিবর্তন স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করে। এটি কোডের পরিমাণ কমায়, মেইনটেনেবলিটি বাড়ায় এবং ডেভেলপমেন্ট প্রক্রিয়াকে দ্রুততর করে।
MVVM প্যাটার্নে ViewModel হল এমন একটি উপাদান, যা View এবং Model এর মধ্যে একটি মধ্যস্থতাকারী হিসেবে কাজ করে। এটি View-এ প্রদর্শিত ডেটা প্রস্তুত করে এবং Model থেকে প্রাপ্ত ডেটাকে View-এ উপস্থাপনযোগ্য ফরম্যাটে রূপান্তর করে। ViewModel সাধারণত বিজনেস লজিক এবং ডেটা প্রসেসিংয়ের কাজ করে, কিন্তু এর সাথে সরাসরি UI উপাদান বা View এর কোন সম্পর্ক নেই। ViewModel Model এর ডেটা ব্যবস্থাপনা করে এবং View এর UI উপাদানগুলির সাথে ডেটা বাইন্ডিংয়ের মাধ্যমে যোগাযোগ স্থাপন করে।
Model এবং View সরাসরি একে অপরের সাথে যোগাযোগ করে না। তাদের ইন্টারঅ্যাকশন সাধারনত ViewModel এর মাধ্যমে ঘটে। নিচে বিস্তারিতভাবে বুঝানো হয়েছে কীভাবে Model, View, এবং ViewModel একে অপরের সাথে ইন্টারঅ্যাক্ট করে:
ViewModel এর মাধ্যমে Model এবং View এর মধ্যে একটি পরিষ্কার, অবিচ্ছিন্ন যোগাযোগ স্থাপন করা হয়। এটি UI এবং বিজনেস লজিককে পৃথক রাখে, যা কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবলিটি, এবং মেইনটেনেবলিটি নিশ্চিত করে।
MVVM প্যাটার্নে Data Binding এবং Command Patterns অত্যন্ত গুরুত্বপূর্ণ উপাদান। এগুলি View, ViewModel, এবং Model এর মধ্যে ইন্টারঅ্যাকশন সহজ করে তোলে এবং অ্যাপ্লিকেশনের কার্যকারিতা বৃদ্ধি করে। নিচে এই দুটি প্যাটার্নের বিস্তারিত ব্যাখ্যা দেয়া হল।
Data Binding হল একটি প্রক্রিয়া যার মাধ্যমে UI উপাদানগুলির (যেমন টেক্সটবক্স, লেবেল, বাটন ইত্যাদি) সাথে ViewModel এর ডেটা সংযুক্ত করা হয়। এর মাধ্যমে UI এবং ডেটার মধ্যে স্বয়ংক্রিয় সিঙ্ক্রোনাইজেশন ঘটে, যা ডেভেলপারদের কোড কমানোর এবং অ্যাপ্লিকেশনের মেইনটেনেন্স সহজ করার সুযোগ দেয়।
Command Pattern MVVM প্যাটার্নে ব্যবহৃত একটি ডিজাইন প্যাটার্ন, যা ইউজারের অ্যাকশন (যেমন বাটনে ক্লিক, আইটেম সিলেক্ট করা ইত্যাদি) কে ViewModel এর মেথডে রূপান্তরিত করে। Command প্যাটার্ন UI এর অ্যাকশন এবং ViewModel এর লজিকের মধ্যে ক্লিন সেপারেশন তৈরি করে এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
Execute()
মেথড থাকতে পারে, যা কাজটি সম্পাদন করবে।ধরা যাক, একটি Login বাটন ক্লিকের কমান্ড তৈরি করা হচ্ছে:
public class LoginCommand : ICommand
{
private readonly LoginViewModel _viewModel;
public LoginCommand(LoginViewModel viewModel)
{
_viewModel = viewModel;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
// চেক করে যদি সবকিছু ঠিক থাকে তবে কমান্ড চালানো যাবে
return !_viewModel.IsProcessing && !string.IsNullOrEmpty(_viewModel.Username);
}
public void Execute(object parameter)
{
_viewModel.Login(); // ViewModel এর Login মেথড কল করা হচ্ছে
}
}
এখানে, LoginCommand
একটি কমান্ড ক্লাস যা LoginViewModel এর Login()
মেথডে লজিক পাঠায়। এই কমান্ডটি View থেকে ট্রিগার হয়, কিন্তু এটি ViewModel এর মেথড কল করে।
Data Binding এবং Command Pattern একত্রে ব্যবহৃত হলে MVVM প্যাটার্নের শক্তি বৃদ্ধি পায়। Data Binding UI এবং ViewModel এর মধ্যে ডেটা সিঙ্ক্রোনাইজ করতে সাহায্য করে, এবং Command Pattern ইউজারের ইনপুট এবং অ্যাকশনগুলি ViewModel এর মেথডে পাঠাতে সাহায্য করে। ফলে, UI এর কার্যকারিতা এবং বিজনেস লজিক আলাদা থাকে এবং অ্যাপ্লিকেশনটি আরও মেইনটেইনেবল এবং টেস্টযোগ্য হয়।
এভাবে, MVVM প্যাটার্নের এই দুটি উপাদান অ্যাপ্লিকেশনের সলিউশনকে আরও পরিষ্কার, মডুলার, এবং টেস্টেবল করে তোলে।
common.read_more